Collider 碰撞器
所有碰撞器的基类。
如果一个对象带有碰撞器,需要在游戏中移动,那么你应该添加个Rigidbody组件给它。如果你不想该对象与其他对象有交互,刚体可以设置为运动学刚体(kinematic)。
变量 | 说明 |
---|---|
attachedRigidbody | 碰撞器附加的刚体。碰撞器会自动连接到这个刚体或它的任意父对象刚体。 |
bounds | 碰撞器框的对象。注意,如果碰撞器被禁用或该游戏对象没激活,边界盒值将返回空。 |
contactOffset | 该碰撞器的触点偏移值。那些碰撞器间的距离比它们的contactOffset值之和小将产生接触。该触点偏移值必须为正。触点偏移允许碰撞检测系统预判接触,即使对象稍微分开点。 |
enabled | 启用碰撞器将会碰撞其他碰撞器,禁用碰撞器就不会碰撞其他碰撞器。 |
isTrigger | 碰撞器是一个触发器? |
material | 用于碰撞器的物理材质。 |
sharedMaterial | 该碰撞器的共享的物理材质。修改材质将改变所有碰撞器使用该材质的表面属性,大多数情况下你可以修改Collider.material替代。 |
公共方法 | 说明 |
---|---|
ClosestPointOnBounds | 到碰撞器的框最近的点。 |
Raycast | 投射一条射线(Ray),它忽略所有碰撞器,除了这个。 |
Messsage 消息 | 说明 |
---|---|
OnCollisionEnter | 当该collider/rigidbody开始碰到另一个rigidbody/collider时OnCollisionEnter被调用。 |
OnCollisionExit | 当 collider/rigidbody停止碰撞另一个 rigidbody/collider时,OnCollisionExit被调用。 |
OnCollisionStay | 每当该collider/rigidbody碰到其他rigidbody/collider,将在每帧调用OnCollisionStay。 |
OnTriggerEnter | 当碰撞器进入触发器时OnTriggerEnter被调用。 |
OnTriggerExit | 当该碰撞器停止接触触发器时,OnTriggerExit被调用。也就是说,当碰撞器离开触发器时,调用OnTriggerExit。 |
OnTriggerStay | 每当碰撞器从进入触发器,几乎每帧调用OnTriggerStay。 |
示例:
Collider.ClosestPointOnBounds 在框上最近的点
到碰撞器的框最近的点。
当应用于爆炸伤害,这能用于计算伤害点数。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float hitPoints = 100.0F;
public Collider coll;
void Start() {
coll = GetComponent<Collider>();
}
void ApplyHitPoints(Vector3 explosionPos, float radius) {
// The distance from the explosion position to the surface of the collider.
Vector3 closestPoint = coll.ClosestPointOnBounds(explosionPos);
float distance = Vector3.Distance(closestPoint, explosionPos);
// The damage should decrease with distance from the explosion.
float damage = 1.0F - Mathf.Clamp01(distance / radius);
hitPoints -= damage * 10.0F;
}
}
Collider.Raycast 射线投射
public bool Raycast(Ray ray, out RaycastHit hitInfo, float maxDistance);
Parameters | 参数 |
---|---|
ray | The starting point and direction of the ray.射线的开始点和方向。 |
hitInfo | If true is returned, hitInfo will contain more information about where the collider was hit (See Also: RaycastHit).\如果返回真,hitInfo将包含更多关于碰撞器碰到哪里的信息(参见RaycastHit) |
distance | The length of the ray.\射线的长度。 |
返回布尔(bool)值,当射线和任何碰撞器相交时,返回true,否则为false。也就是说,当射线碰触到任何碰撞器时返回真,否则返回假。
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Collider coll;
void Start() {
coll = GetComponent<Collider>();
}
void Update() {
if (Input.GetMouseButtonDown(0)) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
// 投射一条射线(Ray),它忽略所有碰撞器,除了这个。
if (coll.Raycast(ray, out hit, 100.0F))
transform.position = ray.GetPoint(100.0F);
}
}
}